name: Create Release PR

on:
  push:
    branches:
      - main

concurrency: ${{ github.workflow }}-${{ github.ref }}

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v4

      - uses: pnpm/action-setup@v3

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          cache: "pnpm"

      - name: Install dependencies
        run: pnpm install

      - name: Get changeset status
        id: get-changeset-status
        run: |
          pnpm changeset status --output .changeset/status.json || true
          if [ -f .changeset/status.json ]; then
            new_version=$(jq -r '.releases[0].newVersion' < .changeset/status.json)
            rm -v .changeset/status.json
            echo "new-version=${new_version}" >> "$GITHUB_OUTPUT"
          fi

      - name: Create Release Pull Request or Publish to npm
        id: changesets
        uses: changesets/action@v1
        with:
          commit: Release ${{ steps.get-changeset-status.outputs.new-version }}
          title: Release ${{ steps.get-changeset-status.outputs.new-version }}
          publish: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Tag and Push Release
        if: steps.changesets.outputs.published == 'true'
        run: |
          git tag v${{ steps.get-changeset-status.outputs.new-version }}
          git push origin v${{ steps.get-changeset-status.outputs.new-version }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
